[libc++] Introduce _LIBCPP_EXTERN_VIS to fix __libcpp_debug_function link errors Summary: On Windows tests that use `_LIBCPP_ASSERT` fail to link because the assertion handler function isn't correctly exported from the libc++ dylib. This patch fixes the dll import/export issues by introducing a new visibility macro `_LIBCPP_EXTERN_VIS` for use on external variables. Reviewers: compnerd, smeenai, EricWF Reviewed By: EricWF Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D28728 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292158 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/docs/DesignDocs/VisibilityMacros.rst b/docs/DesignDocs/VisibilityMacros.rst index 7c6f39c..12c1d56 100644 --- a/docs/DesignDocs/VisibilityMacros.rst +++ b/docs/DesignDocs/VisibilityMacros.rst 
@@ -22,6 +22,12 @@  Mark a symbol as being exported by the libc++ library. This attribute must  be applied to the declaration of all functions exported by the libc++ dylib.   +**_LIBCPP_EXTERN_VIS** + Mark a symbol as being exported by the libc++ library. This attribute may + only be applied to objects defined in the libc++ library. On Windows this + macro applies `dllimport`/`dllexport` to the symbol. On all other platforms + this macro has no effect. +  **_LIBCPP_OVERRIDABLE_FUNC_VIS**  Mark a symbol as being exported by the libc++ library, but allow it to be  overridden locally. On non-Windows, this is equivalent to `_LIBCPP_FUNC_VIS`. 
diff --git a/include/__config b/include/__config index 118e3bd..d7ecdcf 100644 --- a/include/__config +++ b/include/__config 
@@ -583,6 +583,7 @@    #define _LIBCPP_TYPE_VIS _LIBCPP_DLL_VIS  #define _LIBCPP_FUNC_VIS _LIBCPP_DLL_VIS +#define _LIBCPP_EXTERN_VIS _LIBCPP_DLL_VIS  #define _LIBCPP_EXCEPTION_ABI _LIBCPP_DLL_VIS  #define _LIBCPP_HIDDEN  #define _LIBCPP_TEMPLATE_VIS @@ -636,6 +637,10 @@  # define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS  #endif   +#ifndef _LIBCPP_EXTERN_VIS +# define _LIBCPP_EXTERN_VIS +#endif +  #ifndef _LIBCPP_OVERRIDABLE_FUNC_VIS  # define _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_FUNC_VIS  #endif 
diff --git a/include/__debug b/include/__debug index d95e339..d01bacd 100644 --- a/include/__debug +++ b/include/__debug 
@@ -74,7 +74,7 @@    /// __libcpp_debug_function - The handler function called when a _LIBCPP_ASSERT  /// fails. -extern __libcpp_debug_function_type __libcpp_debug_function; +extern _LIBCPP_EXTERN_VIS __libcpp_debug_function_type __libcpp_debug_function;    /// __libcpp_abort_debug_function - A debug handler that aborts when called.  _LIBCPP_NORETURN _LIBCPP_FUNC_VIS